CSS 并不是一门真正意义上的编程语言,因为它缺少变量、运算、函数和控制语句等编程语言应该有的语法,这造成 CSS 代码不但难以复用,而且在 CSS 文件中充斥着冗余的定义,随着项目规模的扩大,维护复杂度骤增。
CSS 预处理器( CSS Preprocessor )的出现弥补了 CSS 的缺陷。 CSS 预处理器并不能替代 CSS ,它只是为 CSS 加入了编程元素,把使用新语法的文件,编译为一个浏览器能识别的普通 CSS 文件。常用的 CSS 预处理器有两种: Less 和 Sass 。
Sass 是基于 Ruby 语言开发而成的,因此使用 Sass 前需要先安装 Ruby 。 Sass 有两种语法格式:旧语法 Sass (缩进格式)和新语法 SCSS ( Sassy CSS )。 SCSS 不但包含了 Sass 的特色功能,还支持所有 CSS3 语法。新语法的文件后缀是 .scss ,而旧语法的文件后缀是 .sass ;新语法中选择器的内容用大括号包裹,而旧语法使用缩进;新语法用分号( ; )分隔语句,而旧语法用换行符。注意,下面的示例使用的都是新语法。
变量: Sass 的变量声明和 PHP 很像,也是以美元符号( $ )开头,再紧跟名称。不过值和名称之间不用等号( = )隔开,而是用冒号( : )。可以用变量表示难记的颜色值、常用的字体大小或长度值。
Sass 支持算术运算符的加减乘除( + 、 - 、 * 、 / )以及比较运算符中的相等( == )或不等( != ) 。注意,运算符前后必须有空格,否则不能正确执行。
在 CSS 中也有命名空间,通过后代选择器和子选择器可以实现 ,命名空间能够隔离代码,从而避免冲突,并且使得 CSS 更加模块化。
当选择器的层级结构比较深,并且需要同时定义几十个时,这种写法的命名空间不仅会造成大量重复代码,而且还会严重影响可读性,增加对代码的理解成本。在 Sass 中,选择器通过相互嵌套形成命名空间,嵌套的形式不但模拟出了 HTML 层级结构,还使得选择器之间的关系更明显,增强了可读性。在选择器嵌套中,可以用 & 表示父级选择器。上面的选择器换成 Sass 的语法,相当于下面的代码。
.float {
& > section {
float: left;
}
div {
float: left;
}
}